﻿using System.Collections.Generic;
using NHibernate;
using Neturion.Dados;
using Neturion.IRepositorios;

namespace Neturion.Repositorios
{
    public class RepositorioTelefone : IRepositorioTelefone
    {
        public Telefone Inserir(Telefone telefone)
        {
            telefone.FimVigencia = telefone.FimVigencia.HasValue
                                   ? telefone.FimVigencia.GetValueOrDefault().Date
                                   : telefone.FimVigencia;
            telefone.InicioVigencia = telefone.InicioVigencia.HasValue
                                        ? telefone.InicioVigencia.GetValueOrDefault().Date
                                        : telefone.InicioVigencia;

            GerenciadorBDConfigs.Instance.SessaoAtual().Save(telefone);
            return telefone;
        }

        public Telefone Atualizar(Telefone telefone)
        {
            Telefone tmpTelefone = ObterPorId(telefone.TelefoneId);
            // Atribuicao dos valores do objeto da memoria para o objeto obtido no banco de dados
            tmpTelefone.CodigoDeArea = telefone.CodigoDeArea;
            tmpTelefone.Endereco = telefone.Endereco;
            tmpTelefone.EnumTipoTelefone = telefone.EnumTipoTelefone;
            tmpTelefone.FimVigencia = telefone.FimVigencia.HasValue
                                   ? telefone.FimVigencia.GetValueOrDefault().Date
                                   : telefone.FimVigencia;
            tmpTelefone.InicioVigencia = telefone.InicioVigencia.HasValue
                                        ? telefone.InicioVigencia.GetValueOrDefault().Date
                                        : telefone.InicioVigencia;
            tmpTelefone.HoraFinal = telefone.HoraFinal;
            tmpTelefone.HoraInicial = telefone.HoraInicial;
            tmpTelefone.NeturionLog = telefone.NeturionLog;
            tmpTelefone.Numero = telefone.Numero;
            tmpTelefone.Operadora = telefone.Operadora;
            tmpTelefone.Pessoa = telefone.Pessoa;
            tmpTelefone.Ramal = telefone.Ramal;

            GerenciadorBDConfigs.Instance.SessaoAtual().Merge(tmpTelefone);
            return tmpTelefone;
        }

        public void Excluir(Telefone telefone)
        {
            GerenciadorBDConfigs.Instance.SessaoAtual().Delete(telefone);
        }

        public IList<Telefone> ObterTodos()
        {
            ICriteria criteria = GerenciadorBDConfigs.Instance.SessaoAtual().CreateCriteria(typeof(Telefone));
            return criteria.List<Telefone>() as List<Telefone>;
        }

        public Telefone ObterPorId(int id)
        {
            return GerenciadorBDConfigs.Instance.SessaoAtual().Get<Telefone>(id);
        }
    }
}